"""
迭代器的应用

    迭代器对象
        完成迭代过程的对象， 具有__next__ 函数

    可迭代对象
        具有 __iter__ 函数的对象，可以返回迭代器对象

需求： 创建一个迭代器，迭代电影列表 自定义列表类型
"""

# movies = ['哪吒2','封神2','十面埋伏'] # 列表，字符串都是可迭代对象
# iterator = movies.__iter__()   # __iter__() 返回的是迭代器对象
# print(iterator,type(iterator))

# 创建迭代器对象的类
class MovieIterator:
    def __init__(self, data):
        self.data = data
        self.index = -1


    def __next__(self):
        self.index += 1
        if self.index < len(self.data): # 有数据则获取数据
            return self.data[self.index]
        raise StopIteration # 没有数据，抛出异常


# 创建可迭代对象的类
class MovieController:

    def __init__(self):
        self.list_movies = []

    def __iter__(self):
        return MovieIterator(self.list_movies)


if __name__ == '__main__':
    m1 = MovieController() # 创建可迭代对象

    m1.list_movies.append('封神2')
    m1.list_movies.append('哪吒2')
    m1.list_movies.append('十面埋伏')
    m1.list_movies.append('花木兰')

    # 获取迭代器
    iterator = m1.__iter__()
    print(iterator,type(iterator))
    while True:
        try:
            item = iterator.__next__()
            print(item)
        except StopIteration:
            break




